package com.papercutting.platform.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import java.time.LocalDateTime;

/**
 * 用户实体
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("pc_user")
public class User extends BaseEntity {

    /**
     * 微信OpenId
     */
    @TableField("open_id")
    private String openId;

    /**
     * 微信UnionId
     */
    @TableField("union_id")
    private String unionId;

    /**
     * 用户昵称
     */
    @NotBlank(message = "用户名不能为空")
    @Size(max = 50, message = "用户名长度不能超过50个字符")
    @TableField("nickname")
    private String nickname;

    /**
     * 用户头像
     */
    @TableField("avatar_url")
    private String avatarUrl;

    /**
     * 性别 0-未知 1-男 2-女
     */
    @TableField("gender")
    private Integer gender;

    /**
     * 国家
     */
    @TableField("country")
    private String country;

    /**
     * 省份
     */
    @TableField("province")
    private String province;

    /**
     * 城市
     */
    @TableField("city")
    private String city;

    /**
     * 语言
     */
    @TableField("language")
    private String language;

    /**
     * 手机号
     */
    @Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号格式不正确")
    @TableField("phone")
    private String phone;

    /**
     * 邮箱
     */
    @Email(message = "邮箱格式不正确")
    @TableField("email")
    private String email;

    /**
     * 密码
     */
    @TableField("password")
    private String password;

    /**
     * 用户类型 0-普通用户 1-管理员
     */
    @TableField("user_type")
    private Integer userType = 0;

    /**
     * 用户状态 0-正常 1-禁用
     */
    @NotNull(message = "用户状态不能为空")
    @TableField("status")
    private Integer status = 0;

    /**
     * 积分
     */
    @TableField("points")
    private Integer points = 0;

    /**
     * 学习进度
     */
    @TableField("study_progress")
    private Integer studyProgress = 0;

    /**
     * 最后登录时间
     */
    @TableField("last_login_time")
    private LocalDateTime lastLoginTime;

    /**
     * 最后登录IP
     */
    @TableField("last_login_ip")
    private String lastLoginIp;

    /**
     * 备注
     */
    @TableField("remark")
    private String remark;


}